#include "../head/server.h"

// 得到绝对路径
void getAbsolutePath(char *path)
{
	char *token;
	char *rest = path;
	char result[100]; // 使用临时缓冲区存储结果路径
	result[0] = '\0'; // 初始化结果路径为空

	while ((token = strtok_r(rest, "/", &rest)))
	{
		if (strcmp(token, "..") == 0)
		{
			// 如果当前token是"..", 则回退到上一级目录
			char *prevToken = strrchr(result, '/');
			if (prevToken)
			{
				*prevToken = '\0'; // 截断到上一级目录
			}
		}
		else if (strcmp(token, ".") != 0)
		{
			// 如果当前token不是"."，则将其添加到结果路径中
			strcat(result, "/");
			strcat(result, token);
		}
	}

	if(!strcmp(result, "\0")) {
		strcat(result, "/");
	}
	// 将最终结果复制回原始路径
	strcpy(path, result);
}

// 通过绝对路径，查询path是否在表中
int is_path(MYSQL *mysql, char *path)
{
	char sql[1024] = {0};
	sprintf(sql, "select count(*) from all_user_file where file_path = '%s';", path);
	puts(sql);
	int qret = mysql_query(mysql, sql);
	if (qret != 0)
	{
		fprintf(stderr, "mysql_query:%s\n", mysql_error(mysql));
		return 0;
	}
	MYSQL_RES *res = mysql_store_result(mysql);
	if (res == NULL)
	{
		fprintf(stderr, "mysql_query:%s\n", mysql_error(mysql));
		mysql_free_result(res);
		return 0;
	}
	MYSQL_ROW row = mysql_fetch_row(res);
	if (row == NULL)
	{
		fprintf(stderr, "mysql_query:%s\n", mysql_error(mysql));
		mysql_free_result(res);
		return 0;
	}
	// int res = atoi(row[0]);
	mysql_free_result(res);

	return atoi(row[0]);
}

// 传入任意路径/文件，查询是否存在于file_table中
int check_file_existance(MYSQL *mysql, char *path, char *user_name)
{
	// puts(path);

	// 从数据库中拿到当前路径
	char *cur_path = get_current_path_by_username(mysql, user_name);

	// 获取绝对路径
	char absolutePath[1024] = {0};
	if (!memcmp(path, "/", strlen("/")))
	{
		memcpy(absolutePath, path, strlen(path));
	}
	else
	{
		memcpy(absolutePath, cur_path, strlen(cur_path));
		strcat(absolutePath, "/");
		strcat(absolutePath, path);
	}
	getAbsolutePath(absolutePath);

	int ret = is_path(mysql, absolutePath);
	if (ret)
	{
		return 0; // 该路径在表中
	}
	return 1; // 该路径不在表中
}